Kubernetes 版本特性
本篇速查 Kubernetes 的版本发布节奏、版本偏差(skew)策略和各 minor 版本的关键变更,用于升级前的快速核对。完整变更以 官方 CHANGELOG 为准。
版本发布节奏
| 项目 | 约定 | 说明 |
|---|---|---|
| 发布频率 | 每年约 3 个 minor 版本 | 早年是每年 4 个,1.22 起调整为 3 个,通常在 4 月、8 月、12 月前后发布 |
| 维护周期 | 每个 minor 约 14 个月 | 官方同时维护最近几个 minor 版本的发布分支,提供 bug 修复和安全补丁 |
| patch 发布 | 大约每月一次 | patch 版本只修 bug 和安全问题,不引入特性变化,跟进要勤快 |
| 版本号 | SemVer:主版本.次版本.补丁 | minor 变化意味着特性与 API 增减,升级要认真对待;patch 升级基本无风险 |
版本偏差(skew)策略
各组件版本不要求完全一致,但偏差有上限:
| 组件组合 | 允许偏差 | 举例 |
|---|---|---|
| kubectl ↔ apiserver | 前后各 1 个 minor | 1.29 的 kubectl 可管理 1.28 ~ 1.30 的集群 |
| kubeadm ↔ apiserver | 前后各 1 个 minor | kubeadm 1.30 可管理 1.29 ~ 1.30 的控制平面 |
| kubelet ↔ apiserver | kubelet 最多落后 3 个 minor | apiserver 1.30 的集群里,kubelet 最低可以是 1.27,但不能比 apiserver 新 |
| kube-proxy ↔ apiserver | 最多落后 3 个 minor | 与 kubelet 同理,也不能比 apiserver 新 |
升级规则
- 升级不能跨 minor 版本,必须逐级升:1.27 → 1.28 → 1.29,跳级(如 1.27 → 1.29)不受支持
- patch 版本之间可以跳:1.28.1 可以直接升 1.28.9
- 升级顺序:先控制平面,再 node 组件(kubelet、kube-proxy),工作负载不用动
- 每升一级先验证集群和业务正常,再继续升下一级;大版本差距越大越要分段走
关键版本变更
| 版本 | 发布时间 | 关键变更 |
|---|---|---|
| 1.20 | 2020-12 | 宣布弃用 dockershim(当时只是警告,Docker 还能继续用);卷快照(Volume Snapshot)功能转正 GA |
| 1.21 | 2021-04 | CronJob 转正 GA(batch/v1);宣布弃用 PodSecurityPolicy(PSP),预告后续由新方案替代 |
| 1.22 | 2021-08 | Ingress networking.k8s.io/v1 转正,v1beta1 移除;同批移除 CRD、APIService、RBAC 等一大批旧 v1beta1 API,是升级重灾区 |
| 1.23 | 2021-12 | IPv4/IPv6 双栈转正 GA;HorizontalPodAutoscaler autoscaling/v2 转正 GA;Pod Security Admission 进入 beta |
| 1.24 | 2022-05 | 正式移除 dockershim,kubelet 不再直连 Docker,须切换 containerd 或 CRI-O;ServiceAccount token 不再自动生成对应 Secret,改用 TokenRequest API |
| 1.25 | 2022-08 | 移除 PodSecurityPolicy(PSP),由内置的 Pod Security Admission 接替;in-tree 卷到 CSI 的迁移功能转正 GA |
| 1.26 | 2022-12 | 移除 autoscaling/v2beta2(HPA 必须用 autoscaling/v2);kubelet 不再支持 CRI v1alpha2,containerd 需 1.6+ |
| 1.27 | 2023-04 | 镜像仓库从 k8s.gcr.io 全面迁移到 registry.k8s.io,旧仓库冻结不再更新;Seccomp 默认配置(SeccompDefault)转正 GA |
| 1.28 | 2023-08 | kubelet 与 apiserver 的允许偏差从 2 个 minor 放宽到 3 个;Sidecar 容器(原生边车)进入 alpha |
| 1.29 | 2023-12 | Sidecar 容器(restartPolicy: Always 的 init 容器)进入 beta,默认开启;ReadWriteOncePod 卷访问模式转正 GA |
| 1.30 | 2024-04 | ValidatingAdmissionPolicy(CEL 表达式校验,可替代部分 webhook)转正 GA;Pod 调度就绪(scheduling readiness)转正 GA |
| 1.31 | 2024-08 | 移除遗留的多个 in-tree 云厂商集成插件,云厂商相关能力一律改用外部云控制器管理器(CCM)和 CSI;AppArmor 支持转正 GA |
| 1.32 | 2024-12 | 详见官方 CHANGELOG |
| 1.33 | 2025-04 | Sidecar 容器转正 GA;原地(in-place)Pod 垂直扩缩进入 beta,部分场景下可不重建 Pod 在线调整 CPU/内存的 request 和 limit |
1.22 和 1.24 是两道坎
跨越 1.22(大批 v1beta1 API 移除)和 1.24(dockershim 移除)的升级最容易踩坑:前者要求清单先换用新 API 版本,后者要求容器运行时先迁移到 containerd 或 CRI-O。老集群升级前先解决这两个问题,再逐级往上走。
GA / Beta / Alpha 是什么
Alpha 默认关闭、随时可能改接口或直接删掉;Beta 通常默认开启、接口基本稳定但细节仍可能调整;GA(转正、正式发布)表示长期稳定,受版本偏差和弃用政策保护。生产环境只用 Beta 后期和 GA 的功能。
版本选择建议
| 场景 | 建议 |
|---|---|
| 生产环境 | 落后最新版 1 ~ 2 个 minor,吃够社区踩坑反馈再升,同时保证仍在官方维护期内 |
| 学习/测试环境 | 可以直接上最新版,提前熟悉新特性和废弃项 |
| 云厂商托管集群(EKS/ACK 等) | 以厂商支持的版本范围为准,通常比上游落后几个 minor,停售版本前必须升走 |
升级前检查清单
- 通读目标版本的 CHANGELOG 和 官方废弃 API 迁移指南
- 用工具扫描存量 YAML 和集群活资源,确认没在用已废弃的 API:
- 确认容器运行时、CNI、Ingress 控制器等周边组件兼容目标版本
- 备份 etcd,先在测试集群完整演练一遍升级流程,再动生产
弃用不等于移除
Kubernetes 的 API 弃用政策给了缓冲期:beta API 宣布弃用后至少保留 9 个月或 3 个 minor 版本,GA API 至少保留 12 个月或 3 个 minor 版本(取较长者),之后才会真正删除。看到 deprecated 警告就该动手迁移,不要等到升级时被已移除的 API 卡住。